/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
     ListNode *dummy=new ListNode(0),*p=dummy;
     dummy->next=head;
     while(p->next){
         ListNode *q=p->next;
         while(q->next && q->next->val==q->val)q=q->next;
         if(q==p->next)p=p->next;
         else p->next=q->next;

     }
     return dummy->next;
    }
};